<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf8">

<title>寻址方式总结</title>
</head>

<body background="../index.files/back_bluh.jpg">

<p><font size="5" color="#3366FF"><b>寻址方式总结</b></font><br>
<br>
<br>
文章作者：东方[E.S.T]<br>
信息来源：邪恶八进制<br>
<br>
初学汇编的人往往搞不懂寻址方式，因此我参考《80X86汇编语言程序设计教程》<br>
一书在加上个人的理解整理的如下内容供初学者参考。<br>
<br>
  表示指令中操作数所在的方法称为寻址方式。<br>
<br>
  8086/8088有7种基本的寻址方式：立即寻址，寄存器寻址，直接寻址，寄存器间接<br>
寻址,寄存器相对寻址，基址加变址寻址方式，相对基址加变址寻址。<br>
<br>
1   立即数寻址<br> 
  操作数就在指令中，作为指令的一部分，跟在操作码后存放在代码段。<br>
  eg.   mov ah,01h<br> 
      mov ax,1204h&nbsp;<br>
      ;如果立即数是16位的，则高地址放在高位，低地址放在低位<br>
<br>
2   寄存器寻址<br> 
  操作数在寄存器中，指令中指定寄存器号。对于8位操作数，寄存器可以是AL,AH,BL,BH,<br>
  CL,CH,DL,DH。 对于16位操作数，寄存器可以是AX,BX,CX,DX,BP,SP,SI,DI等<br> 
  eg.   mov ah,ch<br> 
      mov bx,ax<br> 
<br>
3   直接寻址方式<br> 
  操作数在存储器中，指令直接包含操作数的有效地址EA。<br>
  eg.   mov ax,[1122h]   ;将ds:1122的数据放在ax，默认段为DS<br> 
      mov es:[1234],al ;采用了段前缀<br> 
<br>
4   寄存器间接寻址<br> 
  操作数在存储器中，操作数的有效地址在SI,DI,BX,BP这4个寄存器之一中。在不采用段前<br>
  缀的情况下， 对于DI,SI,BX默认段为DS,而BP为SS。<br> 
  eg.   mov ah,[bx]<br> 
      mov ah,cs:[bx] ;使用了段前缀<br> 
<br>
5   寄存器相对寻址<br> 
  操作数在存储器中，操作数的有效地址是一个基址寄存器(BX,BP)或变址寄存器(SI,DI)的<br>
  内容加上8位或16位的位移之和。在指令中的8位和16位的常量采用补码表示，8位要被带<br>
  符号扩展为16位。<br>
  eg.   mov ah,[bx+6]<br> 
      ;段址默认情况与寄存器间接寻址相同<br>
<br>
6   基址加变址寻址<br> 
  操作数在存储器中，操作数的有效地址是一个基址寄存器(BX,BP)加上变址寄存器(SI,DI)的<br>
  内容。如果有BP，则默认段址为SS,否则为DS.<br>
  eg.   mov ah,[bx+si]<br> 
<br>
7   相对基址加变址寻址<br> 
  操作数在存储器中，操作数的有效地址是一个基址寄存器(BX,BP)和变址寄存器(SI,DI)的<br>
  内容加上8位或16位的位移之和。如果有BP，则默认段址为SS,否则为DS.<br>
  eg.   mov ax,[bx+di-2]<br> 
      mov ax,1234h[bx][di]<br> 
<br>
  [注]：上面3~7为存储器寻址方式&nbsp;<br>
<br>
<br>
  80386支持8088/8086的各种寻址方式。在立即数和寄存器寻址中，操作数可以达32位宽。<br>
在实模式下，80386和8088。8086没什么区别。在保护模式下，段的最大长度是4G。段寄存器内的<br>
是段选择子，而不再是段基地址。<br>
  80386具有灵活的存储器寻址方式，他类似于8088/8086的存储器寻址，不过386的基址寄存器<br>
可以是8个通用寄存器，变址寄存器可以是除ESP外的另7个通用寄存器。寻址方式如下<br>
      |无 |       |无 |<br> 
      |EAX|       |EAX|<br> 
      |EBX|       |EBX|     |1|<br> 
      |ECX|       |ECX|     |2|       | 无 |<br> 
      |EDX|   +   |EDX| *   |4|   + |8 bit |&nbsp;<br>
      |ESP|                   |8|       |32 bit|&nbsp;<br>
      |EBP|       |EBP|<br> 
      |ESI|       |ESI|<br> 
      |EDI|       |EDI|<br> 
</p>     
<center><b><a href="../"><font face="华文行楷" size="5" color="#3333FF">返回目录</font></a></b></center></body></html>
